package LeetCode;

import JavaSe.IO.FileInputOutputStreamTest;

import java.util.ArrayList;
import java.util.List;

/**
 * @author VX5
 * @Title: MJC
 * @ProjectName interview
 * @Description: TODO
 * @date ${DAT}21:18
 */
public class LeetCode17 {
    String[] strings = {// 0是空格 1无匹配的字符
            " ",
            "",
            "abc",
            "def",
            "ghi",
            "jkl",
            "mno",
            "pqrs",
            "tuv",
            "wxyz"
    };

    //最后的结果集
    List<String> list = new ArrayList<>();

    public List<String> letterCombinations(String digits) {
        if (digits == null || digits.equals("")) {
            return list;
        }
        char[] chars = digits.toCharArray();
        getChars2(chars,0,"");
        return list;
    }
    public void getChars2(char[] chars,int index,String s){
        if (index >= chars.length){
            list.add(s);
            return;
        }
        char num = chars[index];
        if (num <= '9' && num >= '2') {
            char[] c = strings[num - '0'].toCharArray();// 拿到对应号码对应的字符
            for (char c1 : c) {
                getChars(chars,index + 1,s + c1);
            }
        }
    }
    //

    /**
     * 进行递归操作
     * @param chars 字符数组
     * @param index 下标
     * @param s 用于拼接的字符串
     */
    public void getChars(char[] chars,int index,String s) {
        // 先写跳出递归条件 -- index下标到达chars的长度的是后就是走了一遍了所有就跳出此次递归，一次只能连接
        // chars长度的字符
        if (index > chars.length - 1){
            list.add(s);
            return;
        }
        // 之后确定是哪个号码
        char c = chars[index];
        // 判断是不是符合规范的字符
        if (c >= '0' && c <= '9' && c != '1'){
            // 得到该号码所有的字符
            char[] chars1 = strings[c - '0'].toCharArray();
            // 将对应的字符串进行拆分,进行递归
            for (int i = 0; i < chars1.length; i++){
                getChars(chars,index + 1,s + chars1[i]);
            }
        }
    }


    public static void main(String[] args) {
        System.out.println(new LeetCode17().letterCombinations("23").toString());
    }
}
